package org.guass.sequence;

/**
 * @author guass
 */
public interface LinearList {

    /**
     * 元素个数
     * @return
     */
    int size();

    /**
     * 表长度
     * @return
     */
    int length();

    /**
     * 搜索元素的下标
     * @param t
     * @param <T>
     * @return
     */
    <T> int search(T t);


    /**
     * 获取下标元素的值
     * @param index
     * @param <T>
     * @return
     */
    <T> T getData(int index);

    /**
     * 修改值
     * @param index
     * @param data
     * @param <T>
     */
     void setData(int index, Object data);


    /**
     * 在第index 后插入值
     * @param <T>
     * @param index
     * @param data
     * @return
     */
    boolean insert(int index, Object data);


    /**
     * 删除第index 个元素
     * @param index
     * @param <T>
     * @return
     */
    <T> T remove(int index);

    /**
     * 为空
     * @return
     */
    boolean isEmpty();

    /**
     * 满了
     * @return
     */
    boolean isFull();

    /**
     * 排序
     */
    void sort();

    /**
     * 合并并存于la
     * @param la
     * @param lb
     */
    void union(LinearList la, LinearList lb);

    /**
     * la 和 lb 的公共元素 存于la
     * @param la
     * @param lb
     */
    void intersection(LinearList la, LinearList lb);
}
